//线程的封装
#include<iostream>
#include<unistd.h>
#include<vector>
#include"Thread.hpp"
using namespace std;
using namespace ThreadModule;

int tickets=1000;
//线程互斥
void route(const string& name)
{
    while(true)
    {
        if(tickets > 0)
        {
            // 抢票过程
            usleep(1000); // 1ms -> 抢票花费的时间
            printf("who: %s, get a ticket: %d\n", name.c_str(), tickets);
            tickets--;
        }
        else
        {
            break;
        }
    }
}
int main()
{
    Thread t1("thread-1",route);
    Thread t2("thread-2",route);
    Thread t3("thread-3",route);
    Thread t4("thread-4",route);

    t1.Start();


    t1.Join();
    return 0;
}






// void Print(const string &name)
// {
//     int cnt = 1;
//     while (true)
//     {
//         std::cout << name << "is running, cnt: " << cnt++ << std::endl;
//         sleep(1);
//     }
// }

// const int gnum  = 10;

// int main()
// {
//     // 我在管理原生线程， 先描述，在组织
// //     // 构建线程对象
//     //创建一批线程
//     vector<Thread>threads;
//     for(int i=0;i<gnum;i++)
//     {
//         string name = "thread-"+to_string(i+1);
//         threads.emplace_back(name,Print);
//         sleep(1);
//     }
//     for(auto &thread:threads)//同一启动
//     {
//         thread.Start();
//     }
//     for(auto &thread:threads)//同一结束
//     {
//         thread.Stop();
//     }
//     for(auto &thread:threads)//同一等待
//     {
//         thread.Join();
//     }



//     //Thread t("thread-1",Print);//创建单个线程
//     // t.Start();
//     // std::cout << t.Name() << ", status: " << t.Status() << std::endl;
//     // sleep(10);

//     // t.Stop();

//     // t.Join();
//     return 0;
// }
